nginx 缓存配置详解都是干货 |
您所在的位置:网站首页 › nginx 图片 类型 配置 › nginx 缓存配置详解都是干货 |
一、缓存类型
1、服务端缓存
定义缓存目录空间大小和名字。 可参考 http_proxy_module中proxy_cache官网文档:Module ngx_http_proxy_module 2、配置代理缓存 配置语法: Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, server, locationzone : 就是上一步所配置的 proxy_cache_path 中 path 的名字。表示缓存存入哪个路径。 3、缓存过期时间 配置语法: Syntax: proxy_cache_valid [code ...] time; Default: — Context: http, server, locationcode : http 状态码。 例如配置 proxy_cache_valid 200 12h 意思是状态码为 200 的 缓存 12个小时。 4、缓存的维度 Syntax: proxy_cache_key string; Default: proxy_cache_key $scheme$proxy_host$request_uri; Context: http, server, location proxy_cache_key $scheme$proxy_host$request_uri : http协议 + 主机名 + uri 把这三个作为一个单独的key来缓存。如何还需要缓存别的,就按照这种格式来设置。 示例: a、负载均衡缓存服务配置(/etc/nginx/conf.d/cache_test.conf)如下:proxy_cache_path /opt/app/cache 存放缓存文件的目录 levels=1:2 目录分级,按照两层目录的方式来进行分级。 keys_zone=chrdai_cache:10m zone空间的名字,后面配置 proxy_cache 后面配的就是这个名字。10m表示开辟key空间的大小,一般1m大概能存放8000个key。 max_size=10g 表示缓存目录最大是多大,不能让缓存无限增长占满整个磁盘。当缓存空间满了后,Nginx就会触发淘汰规则,把不常访问的就会淘汰掉。 inactive=60m 这个60m是时间单位,表示60分钟,表示如果在60分钟内如果某个缓存没有被访问过,就会把它清理掉。 use_temp_path=off 这个是用来存放临时文件的,建议关闭,如果打开的话,Nginx会另外建立一个目录和cache目录两个目录在更新缓存时容易出现一些性能方面的损耗。 proxy_cache chrdai_cache 表示我们已经开启了代理缓存,该值是proxy_cache_path中的 keys_zone 的值,如果不想使用代理缓存,将该值配置成 off。 proxy_pass http://chrdai 代理的地址 proxy_cache_valid 200 304 12h; 状态码为200,304的响应过期时间为 12h。 proxy_cache_valid any 10m; 除了200和304状态码的其它状态码的缓存时间为10分钟。 proxy_cache_key $host$uri$is_args$args; 设置默认缓存的key。 $is_args表示请求中的URL是否带参数,如果带参数,$is_args值为"?"。如果不带参数,则是空字符串。 $args表示HTTP请求中的参数。 add_header Nginx-Cache "$upstream_cache_status"; 增加一个http响应头信息,Nginx-Cache,告诉客户端是否已经命中代理缓存。 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; 当我们的后端其中一台服务器出现错误,超时,或者500,502,503,504等不正常的头返回时,就跳过这一台,去访问下一台。避免因为单台服务器的异常对前端产生影响。 b、 另外三台真实服务器的配置如下:第一台(/etc/nginx/conf.d/realserver1.conf): 第二台(/etc/nginx/conf.d/realserver2.conf):
第三台(/etc/nginx/conf.d/realserver3.conf): 第一台(/opt/app/code1): Test proxy_cache1 第二台(/opt/app/code2): Test proxy_cache2 第三台(/opt/app/code3): Test proxy_cache3 刷新第一遍的时候,请求头 Nginx-Cache : MISS 第二遍刷新的时候就命中了代理缓存。 同时也会在我们配置的缓存目录(/opt/app/cache)生成缓存目录 m -rf 缓存目录内容 这样会把所有的缓存都给清空掉。 方法二第三方拓展模块 ngx_cache_purge 四、如何让部分页面不缓存 配置语法 Syntax:proxy_no_cache string...; Default:-; Context:http,server,location; 配置示例:这里配置的意思就是当url中匹配到了 index.html , login, register, password 和 reset 时,不缓存该url所对应的页面。 五、缓存命中分析 方式一通过设置 response 的头信息 Nginx-Cache add_header Nginx-Cache "$upstream_cache_status"; 方式二通过设置 log_format,打印日志进行分析。(打印 $upstream_cache_status 这个Nginx默认的变量) $upstream_cache_status 这个变量有以下几种值: 状态含义MISS未命中,请求被传送到后台处理HIT缓存命中EXPIRED缓存已经过期,请求被传送到后台处理UPDATING正在更新缓存,将使用旧的应答STALE后端得到过期的应答缓存命中率 = HIT次数 / 总请求次数。 示例:首先在 /etc/nginx/nginx.conf 中的 logformat 中加入 $upstream_cache_status 这个变量。 然后配置缓存代理的 access_log 的路径 然后使用linux 的awk 命分析日志 。 awk '{if($NF=="\"HIT\""){hit++}}END{printf "%.2f", hit/NR}' /var/log/nginx/proxy_cache_access.log命令解释: $NF : 日志每行的最后一个参数。 hit:我们自定义的一个变量,用来记录被命中的次数。 NR:AWK的内置变量,表示本次分析所扫描日志的总行数。 命令执行结果: 说明我们的缓存命中率为 58%。 六、大文件的分片请求 http_slice_module 配置语法 Syntax:slice size; Default:slice 0; Context:http,server,location;size 是一个大小,表示是大文件被分割后,小文件的大小。 实现原理会根据 Range 的值分割成小的请求去请求后端,返回回来的就是一个一个小的缓存文件, 优势:每个子请求收到的数据都会形成一个独立文件,一个请求断了,其它请求不受影响。 缺点:当文件很大或者 slice 很小的时候,可能会导致文件描述符耗尽等情况。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |